package org.osiris.client.services;

import java.util.Date;
import java.util.List;

import org.osiris.client.model.*;
import org.osiris.persistence.Modificaciondeec;
import org.osiris.persistence.Peticioncambio;
import org.osiris.persistence.Proyecto;
import org.osiris.persistence.Recurso;
import org.osiris.persistence.Relacionrequisito;
import org.osiris.persistence.Requisito;
import org.osiris.persistence.Usuario;


import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.ServiceDefTarget;

/**
 * Authentication service.
 * 
 * @author See Wah Cheng
 * @created 5 Jun 2009
 */
public interface BussinessInterfaceService extends RemoteService {
	
	public static final String SERVICE_URI = "bussinessInterfaceService";

	public static class Util {

		public static BussinessInterfaceServiceAsync getInstance() {

			BussinessInterfaceServiceAsync instance = (BussinessInterfaceServiceAsync) GWT.create(BussinessInterfaceService.class);
			ServiceDefTarget target = (ServiceDefTarget) instance;
			target.setServiceEntryPoint(GWT.getModuleBaseURL() + SERVICE_URI);
			return instance;
		}
	}
	public List<RequisitoViewBean> buscarRequisitos(String autor,
			String descripcion,
			String detallerequisito,
			Date fechaalta,
			Date fechabaja,
			ComplejidadrequisitoViewBean idComplejidadRequisito,
			EstadorequisitoViewBean idEstadoRequisito,
			Long idRequisito,
			CategoriaViewBean subcategoria,
			TipoRequisitoViewBean idTipoRequisito,
			String nombre,
			Integer puntosFuncion,
			String referencia,
			String responsable,
			String origen,
			ProyectoViewBean pr, 
			Long requisito_relacionado,boolean dependencia);
	public List<ProyectoViewBean> buscarProyectos( String cliente, String descripcion, String estado,Date fechaalta,Long idProyecto,String nombre,String referencia,String usuario);
	public RequisitoViewBean crearRequisito(
			String referencia,
			Long categoriaBiewBean,
			long estado,
			String puntosFuncion,
			Long usuarioAlta,
			Long responsable,
			Long tipo,
			long subcategoria,
			long complejidad,
			String nombre,
			String version,
			String origen,
			String detalle,
			Long proyecto,
			Long prioridad,
			Long incertidumbre,
			String situacion,String resumen);
	public ProyectoViewBean crearProyecto(String cliente, String descripcion,
			String estado, String nombre, String referencia,
			String usuario_resposanble,String usuario_alta,String resumen);
	public Boolean modificarProyecto(ProyectoViewBean proyecto);
	
	
	
	/*RIESGOS*/
	public List <RiesgoViewBean> getRiesgosRequisito(Long requisito);
	public RiesgoViewBean asociarRiesgoARequisito(Long requisito,String descripcion,String nombre, Long usuario, String impacto, String probabilidad);
	public boolean desasociarRiesgoARequisito(Long requisito,Long riesgo);
	
	
	public List <RequisitoViewBean> getDependenciasRequisito(RequisitoViewBean requisito);
	
	
	public  boolean crearDependenciaRequisito(RequisitoViewBean requisito,RequisitoViewBean nueva_dependencia);
	public  boolean eliminarDependenciaRequisito(RequisitoViewBean requisito,RequisitoViewBean nueva_dependencia);
	
	public List<RequisitoViewBean> getRequisitosProyecto(ProyectoViewBean proy);
	public boolean asociarRequisitoAProyecto(ProyectoViewBean proy,RequisitoViewBean req,Long prioridad,Long inceryidumbre,Long estado);
	public boolean desasociarRequisitoAProyecto(ProyectoViewBean proy,RequisitoViewBean req);
	public List <RequisitoViewBean> getVersionesRequisito(RequisitoViewBean req);
	public List <RequisitoViewBean> getRecursosRequisito(RequisitoViewBean req);
	
    Boolean altaPeticionCambio(UsuarioViewBean autor,ComplejidadrequisitoViewBean complejidad,String descripcion,Double esfuerzo,EstadorequisitoViewBean estado,List<RequisitoViewBean>  impactos,Long idPeticion,IncertidumbreViewBean incertidumbre,String motivo,String origen,PrioridadViewBean prioridad,List<RecursoViewBean> recursos);
    
    List<PeticionCambioViewBean> buscarPeticionCambio(Long id,
                                String texto,
                                Long usuario,
                                Long requisito,
                                Long proyecto,
                                Date desde, Date hasta,
                                Long incertidumbre,
                                Long prioridad,
                                Long estado,
                                Long complejidad);

    Boolean modificarPeticionCambio(PeticionCambioViewBean p);
    
    
    Boolean altaRecursoAPeticion(PeticionCambioViewBean p,RecursoViewBean r);
    Boolean bajaRecursoAPeticion(PeticionCambioViewBean p,RecursoViewBean r);
    
    RecursoViewBean altaRecurso(String nombre,String referenmcia,String  filename,String descripcion,TipoRecursoViewBean subtipo);
    Boolean modificarRecurso(RecursoViewBean r);
    
    
    Boolean asignarRecursoARequisito(RequisitoViewBean p,RecursoViewBean r);
    Boolean desasignarRecursoARequisito(RequisitoViewBean p,RecursoViewBean r);
    

    List <RecursoViewBean> buscarRecurso(Long id,
                                Long idtipo,
                                Long idsubtipo,
                                String filename,
                                String nombre,
                                String referencia,
                                String descripcion);
    List <TipoRecursoViewBean> getTiposRecurso();
	List <IncertidumbreViewBean> getIncertidumbres();
	List <PrioridadViewBean> getPrioridades();
	List <CategoriaViewBean> getCategorias();
	List <CategoriaViewBean> getSubCategorias(CategoriaViewBean cat);
	List <EstadorequisitoViewBean> getEstadosRequisito();
	List <ComplejidadrequisitoViewBean> getComplejidadRequisito();
	List <org.osiris.client.model.TipoRequisitoViewBean> getTipos();
	List <org.osiris.client.model.UsuarioViewBean>  getUsuarios();
	List <org.osiris.client.model.ProyectoViewBean>  getProyectos();
	List <org.osiris.client.model.EstadoProyectoViewBean>  getEstadoProyectoViewBean();
	
}
